package com.qijian.mold.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qijian.mold.domain.param.mold.GetMoldParam;
import com.qijian.mold.domain.param.moldChange.ConfirmMoldChangParam;
import com.qijian.mold.domain.param.moldChange.CreateMoldChangeParam;
import com.qijian.mold.domain.param.moldChange.SelectMoldChangeParam;
import com.qijian.mold.domain.param.moldChange.WorkshopConfirmMoldChangParam;
import com.qijian.mold.domain.param.task.*;
import com.qijian.mold.domain.vo.ApiResultVo;
import com.qijian.mold.domain.vo.PageResult;
import com.qijian.mold.domain.vo.mold.MoldDetailsVo;
import com.qijian.mold.domain.vo.moldChange.*;
import com.qijian.mold.domain.vo.task.TaskDetailsVo;
import com.qijian.mold.domain.vo.task.TaskListVo;
import com.qijian.mold.domain.vo.user.UserDetailsVo;
import com.qijian.mold.enums.MoldRoleEnum;
import com.qijian.mold.service.MoldChangeLogService;
import com.qijian.mold.service.MoldChangeService;
import com.qijian.mold.service.MoldChangeTaskService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 换模任务
 * @author anni.zhu
 * @author anni.zhu@king-v.com
 * Created in 2025/3/29 19:38
 */
@Api(tags = "换模任务")
@RestController
@RequestMapping("/mold/change/task")
public class MoldChangeTaskController {

    @Autowired
    private MoldChangeTaskService service;

    /**
     * 创建上模任务
     * @param param
     * @return
     */
    @PostMapping("/saveUp")
    public ApiResultVo saveUp(@RequestBody @Valid CreateUpTaskParam param) {
        service.saveUp(param);
        return ApiResultVo.success();
    }

    /**
     * 创建下模任务
     * @param param
     * @return
     */
    @PostMapping("/saveDown")
    public ApiResultVo saveDown(@RequestBody @Valid CreateDownTaskParam param) {
        service.saveDown(param);
        return ApiResultVo.success();
    }

    /**
     * 技术工修改任务的操作员，以及在最新日志记录选择的操作员
     * @param param
     * @return
     */
    @PostMapping("/updateUserTask")
    public ApiResultVo updateUserTask(@RequestBody @Valid UpdateTaskUserParam param) {
        service.updateUserTask(param);
        return ApiResultVo.success();
    }

    /**
     * 移交任务
     * @param param
     * @return
     */
    @PostMapping("/turnOverTask")
    public ApiResultVo turnOverTask(@RequestBody @Valid TurnOverTaskParam param) {
        service.turnOverTask(param);
        return ApiResultVo.success();
    }

    /**
     * 移交任务
     * @param param
     * @return
     */
    @PostMapping("/turnOverTaskVisible")
    public ApiResultVo turnOverTaskNew(@RequestBody @Valid TurnOverTaskParam param) {
        service.turnOverTaskVisible(param);
        return ApiResultVo.success();
    }

    /**
     * 删除上模任务
     * @param taskId
     * @return
     */
    @GetMapping("/deleteUpTask")
    public ApiResultVo deleteUpTask(@RequestParam("taskId") Long taskId) {
        service.deleteUpTask(taskId);
        return ApiResultVo.success();
    }

    /**
     * 删除下模任务
     * @param taskId
     * @return
     */
    @GetMapping("/deleteDownTask")
    public ApiResultVo deleteDownTask(@RequestParam("taskId") Long taskId) {
        service.deleteDownTask(taskId);
        return ApiResultVo.success();
    }

    /**
     * 获取所有空闲的模具
     * @return
     */
    @PostMapping("/getMoldList")
    public PageResult<MoldDetailsVo> getMoldList(@RequestBody GetMoldParam param) {
        Page<MoldDetailsVo> vo = service.getMoldList(param);
        return PageResult.success(vo);
    }


    /**
     * 根据设备id获取关联的模具
     * @return
     */
    @GetMapping("/getMoldListByEqpId")
    public ApiResultVo<List<MoldDetailsVo>> getMoldListByEqpId(@RequestParam("eqpId") Long eqpId) {
        List<MoldDetailsVo> vo = service.getMoldListByEqpId(eqpId);
        return ApiResultVo.success(vo);
    }

    /**
     * 确认完成上模任务
     * @param param
     * @return
     */
    @PostMapping("/completeUpTask")
    public ApiResultVo completeUpTask(@RequestBody @Valid CompleteUpTaskParam param) {
        service.completeUpTask(param);
        return ApiResultVo.success();
    }

    /**
     * 开始调试上模任务
     * @param
     * @return
     */
    @PostMapping("/debugStartUpTask")
    public ApiResultVo debugStartUpTask(@RequestParam("taskId")Long taskId) {
        service.debugStartUpTask(taskId);
        return ApiResultVo.success();
    }

    /**
     * 结束调试上模任务
     * 上模任务变成已完成
     * @param param
     * @return
     */
    @PostMapping("/debugCompleteUpTask")
    public ApiResultVo debugCompleteUpTask(@RequestBody @Valid CompleteUpTaskParam param) {
        service.debugCompleteUpTask(param);
        return ApiResultVo.success();
    }

    /**
     * 确认完成下模任务
     * 下模任务变成已完成
     * @param param
     * @return
     */
    @PostMapping("/completeDownTask")
    public ApiResultVo completeDownTask(@RequestBody @Valid CompleteUpTaskParam param) {
        service.completeDownTask(param);
        return ApiResultVo.success();
    }

    /**
     * 获取任务详情
     * @return
     */
    @GetMapping("/getTaskDetails")
    public ApiResultVo<TaskDetailsVo> getTaskDetails(@RequestParam("taskId") Long taskId) {
        TaskDetailsVo vo = service.getTaskDetails(taskId);
        return ApiResultVo.success(vo);
    }

    /**
     * 获取任务列表分页
     *
     * @return
     */
    @PostMapping("/selectByPage")
    public PageResult<TaskListVo> selectByPage(@RequestBody SelectTaskParam param) {
        Page<TaskListVo> page = service.selectByPage(param);
        return PageResult.success(page);
    }

    /**
     * 操作员确认的时候选择的用户数据-根据任务id获取操作员
     * @return
     */
    @GetMapping("/getUserListByTaskId")
    public ApiResultVo<List<UserDetailsVo>> getUserListByTaskId(@RequestParam("taskId") Long taskId) {
        List<UserDetailsVo> vo = service.getUserListByTaskId(taskId);
        return ApiResultVo.success(vo);
    }

    /**
     * 移交的时候选择的用户数据-根据任务id获取不在该任务下的操作员
     * @return
     */
    @GetMapping("/getUserListByTurnOver")
    public ApiResultVo<List<UserDetailsVo>> getUserListByTurnOver(@RequestParam("taskId") Long taskId) {
        List<UserDetailsVo> vo = service.getUserListByTurnOver(taskId);
        return ApiResultVo.success(vo);
    }


    /**
     * 1-4-5的时候选择的用户数据-根据申请单id获取所有的上模人员和下模人员
     * @return
     */
    @GetMapping("/getUserListByDebugOver")
    public ApiResultVo<List<UserDetailsVo>> getUserListByDebugOver(@RequestParam("moldChangeId") Long moldChangeId) {
        List<UserDetailsVo> vo = service.getUserListByDebugOver(moldChangeId);
        return ApiResultVo.success(vo);
    }

}
